
package com.example.timecodecalc;

import java.util.ArrayList;
import java.util.ListIterator;

public class TimecodeNumerator  {
	private String strtime;
	private ArrayList<digit>  digits;
	private ListIterator it;
	int maxdigits;
private class digit
{
	//static String str; // Строка для выввода через двоеточие
	//static String strtime; // Представление таймкода ввиде строки
	int digit; // Переменная для хранения фреймов,секунд, минут, часов, дней, месяцев, годов
	int maxofdigit; // Максимальное значение переменной 
	int divider; // Делитель текущего разряда для получения значения из общего числа фреймов
digit(int maxint)
{
	maxofdigit=maxint;
	digit=0;
	divider=0;
}
}
TimecodeNumerator(int ...args)
{
		if(!digits.isEmpty())
		digits.removeAll(digits);
	
		it=digits.listIterator();
		for(int i=0;i<args.length;i++)
			it.add(new digit(args[i]));
		// Вычисляем максимальное колличество символов
		for(int i=0;i < args.length;i++)
			maxdigits+=String.valueOf(args[i]).length();
		int tdivide=1;
		Timecode tmp; // Заполняем делители каждого разряда
		
		while(!it.hasNext()) it.next();
		
		while(it.hasPrevious())
		{
			digit a=(digit)it.previous();
			tdivide*=a.maxofdigit;
			a.divider=tdivide;
		}
}
TimecodeNumerator(String digitstring)
{		
		String[] temp;
		if(!digits.isEmpty())
			digits.removeAll(digits);
		
		temp = digitstring.split(":");
		it=digits.listIterator();
		for(int i=0;i<temp.length;i++)
			it.add(new digit(Integer.valueOf(temp[i])));
		// Вычисляем максимальное колличество символов
		for(int i=0;i < temp.length;i++)
			maxdigits+=String.valueOf(temp[i]).length();
		int tdivide=1;
		Timecode tmp; // Заполняем делители каждого разряда
		
		while(!it.hasNext()) it.next();
		
		while(it.hasPrevious())
		{
			digit a=(digit)it.previous();
			tdivide*=a.maxofdigit;
			a.divider=tdivide;
		}
}
public String FramesToTimecode(int frames) 
{
	// Перевод таймкода из элементарного количества фреймов в строку без двоеточия
	
	int tdivide=1;
	digit c;
	
	int rest;
	rest=frames;
	
	while(!it.hasPrevious()) it.previous();
	
	while(it.hasNext())
	{
		digit a=(digit)it.next();
		digit b=(digit)it.previous();
		b.digit=rest/a.divider;
		rest=rest-b.digit*a.divider;
	}

	if(it.hasNext())
		((digit)it.next()).digit=rest;
	while(!it.hasPrevious()) it.previous();
	
	strtime="";
	String tmp=":";
	int d;
	
	while(it.hasNext())
	{
		digit cur=(digit)it.next();
		int count=1;
		int a=cur.digit;
		if(cur.maxofdigit >=1)
		// Выдаем каждый знак в зависимости от колличества разрядов целое от деления на 10
		while(count<cur.maxofdigit)
		{
				d=a%10; // Последняя цифра десятичного числа
				tmp=String.valueOf(d)+tmp;
				a=(a-d)/10; // Оставшиеся разряды
				count*=10;
		}
		strtime=strtime+tmp+((it.hasNext()==true)?":":"");
		//strtime=strtime+tmp; //Если последний знак не выдаем двоеточие
	
	}
	return strtime;
}

		
}


